# -*- coding:utf-8 -*-
import json
import logging

import requests

class BasePage:
    def send(self, data: dict):
        """
        发起请求
        :param data:
        :return:
        """
        data['url'] = str(data['url'])
        logging.info(f"请求URL：{data['url']}")
        res = requests.request(data['method'], data['url'], headers=data['headers'],
                               json=data['data'], verify=False)  # 调用requests库中的post方法，传入请求地址，请求参数和header的值

        logging.info(f"返回{data['method']}响应:{res.json()}")
        # res 有天然优势；状态码， 使用更灵活
        return res

    def send_request(self,method,url, data, headers, htestcassid, htestcasename, htesthope, fanhuitesthope, st):
        """
        hurl：接口请求地址
        hdata：请求参数
        headers：设置的请求头信息
        htestcassid：测试用例编号
        htestcassname：测试用例名称
        htesthope：返回的状态（成功或者失败或者状态 200 等）
        fanhuitesthope：期望的返回结果
        st: 提取响应信息里的实际返回值
        """

        hr = requests.request(method,url, data=data, headers=headers)  # 调用requests库中的post/get方法，传入请求地址，请求参数和header的值
        hresult = json.loads(hr.text)  # 这个是将返回的json字符串转换成python可以识别的字典
        hstatus = str(hresult[st])  # 将st参数值为key的value值取出，然后转换成字符串赋给hstatus变量，这里的变量特指返回的状态信息

        hlist = []
        if hstatus == htesthope and fanhuitesthope in str(hresult):  # 这里是判断返回的信息是否是正确的，要2个条件都满足才算是正确的

            hhhdata = {"t_id": htestcassid,
                       "t_name": htestcasename,
                       "t_method": "POST",
                       "t_url": url,
                       "t_param": "测试数据:" + str(data),
                       "t_hope": "status:" + htesthope + "期望结果：" + fanhuitesthope,
                       "t_actual": "status:" + hstatus + "实际返回结果：" + str(hresult),
                       "t_result": "通过"
                       }

            # 上面定义的hhhdata是将一些关键的接口返回结果信息放到字典中存储
            hlist.append(hhhdata)  # 将每个接口的返回结果以字典为单位放到hlist列表中

        else:  # 下面的代码是返回的信息不是期望的时候的处理逻辑
            hhhdata = {"t_id": htestcassid,
                       "t_name": htestcasename,
                       "t_method": "POST",
                       "t_url": url,
                       "t_param": "测试数据:" + str(data),
                       "t_hope": "status:" + htesthope + "期望结果：" + fanhuitesthope,
                       "t_actual": "status:" + hstatus + "实际返回结果：" + str(hresult),
                       "t_result": "失败"
                       }
            hlist.append(hhhdata)
        return hlist




